home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Grafik & Text / OzTeX3.0 / Metafont / Inputs / ec / exrlwest.mf < prev    next >
Text File  |  1997-03-16  |  52KB  |  1,167 lines

  1. % exrlwest.mf
  2. %
  3. % (c) Copyright 1995, 1996, 1997 J"org Knappen
  4. % (c) Copyright 1990, 1992 Norbert Schwarz
  5. %
  6. % This file is part of ecfonts version 1.0
  7. %
  8. % Please read the files 00readme.txt, 00inst.txt, 00error.txt, and
  9. % copyrite.txt for further information
  10. %
  11. % You find some documentation in ecdoc.tex (needs LaTeX2e)
  12. %
  13. % Content:
  14. %
  15. %   lowercase accented letters ("western part")
  16. %
  17. %   oct"340" .. oct"377"
  18. %
  19. %   oct"340"    a with gravis
  20. %   oct"341"    a with acute
  21. %   oct"342"    a with circumflex
  22. %   oct"343"    a with tilde
  23. %   oct"344"    a with umlaut
  24. %   oct"345"    a with ring
  25. %   oct"346"    ae
  26. %   oct"347"    c with cedilla
  27. %
  28. %   oct"350"    e with gravis
  29. %   oct"351"    e with acute
  30. %   oct"352"    e with circumflex
  31. %   oct"353"    e with umlaut
  32. %   oct"354"    i with gravis
  33. %   oct"355"    i with acute
  34. %   oct"356"    i with circumflex
  35. %   oct"357"    i with umlaut
  36. %
  37. %   oct"360"    edh (icelandic)
  38. %   oct"361"    n with tilde
  39. %   oct"362"    o with gravis
  40. %   oct"363"    o with acute
  41. %   oct"364"    o with circumflex
  42. %   oct"365"    o with tilde
  43. %   oct"366"    o with umlaut
  44. %   oct"367"    oe
  45. %
  46. %   oct"370"    o with  /
  47. %   oct"371"    u with gravis
  48. %   oct"372"    u with acute
  49. %   oct"373"    u with circumflex
  50. %   oct"374"    u with umlaut
  51. %   oct"375"    y with acute
  52. %   oct"376"    thorn
  53. %   oct"377"    sharp s
  54.  
  55. version_check(1,0);  % |version_check| was introduced in dc1.3
  56.  
  57. ecchar "The letter a with gravis";
  58. beginchar_twice(oct"340",9u#,x_height#+acc_height#,0);
  59. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  60. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  61. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  62. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  63. if serifs: pos1(flare,180); pos2(hair,180);
  64.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  65.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  66.  bulb(3,2,1);  % bulb
  67. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  68.  pos3(1/8[vair,thin_join],90);
  69.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  70.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  71. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  72. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  73. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  74. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  75. pos7(hround(curve-2stem_corr),180);
  76. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  77. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  78. pos9(thin_join,360); z9l=z5l;
  79. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  80. {{interim superness:=more_super;
  81.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  82. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  83.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  84.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  85.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  86.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  87.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  88.   filldraw z5'l---z10l...z11l{right}--z11r
  89.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  90.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  91.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  92.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  93.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  94.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  95.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  96.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  97. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  98.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  99.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  100.  filldraw stroke z5'e--z10e; fi  % base of stem
  101. hpos_corr=u; put_gravis;
  102. repeat_once;
  103. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); endchar;
  104.  
  105. ecchar "The letter a with acute";
  106. beginchar_twice(oct"341",9u#,x_height#+acc_height#,0);
  107. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  108. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  109. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  110. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  111. if serifs: pos1(flare,180); pos2(hair,180);
  112.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  113.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  114.  bulb(3,2,1);  % bulb
  115. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  116.  pos3(1/8[vair,thin_join],90);
  117.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  118.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  119. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  120. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  121. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  122. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  123. pos7(hround(curve-2stem_corr),180);
  124. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  125. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  126. pos9(thin_join,360); z9l=z5l;
  127. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  128. {{interim superness:=more_super;
  129.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  130. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  131.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  132.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  133.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  134.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  135.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  136.   filldraw z5'l---z10l...z11l{right}--z11r
  137.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  138.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  139.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  140.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  141.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  142.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  143.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  144.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  145. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  146.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  147.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  148.  filldraw stroke z5'e--z10e; fi  % base of stem
  149. hpos_corr=-u; put_accent;
  150. repeat_once;
  151. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); endchar;
  152.  
  153. ecchar "The letter a with circumflex";
  154. beginchar(oct"342",9u#,x_height#+acc_height#,0);
  155. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  156. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  157. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  158. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  159. if serifs: pos1(flare,180); pos2(hair,180);
  160.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  161.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  162.  bulb(3,2,1);  % bulb
  163. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  164.  pos3(1/8[vair,thin_join],90);
  165.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  166.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  167. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  168. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  169. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  170. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  171. pos7(hround(curve-2stem_corr),180);
  172. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  173. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  174. pos9(thin_join,360); z9l=z5l;
  175. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  176. {{interim superness:=more_super;
  177.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  178. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  179.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  180.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  181.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  182.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  183.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  184.   filldraw z5'l---z10l...z11l{right}--z11r
  185.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  186.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  187.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  188.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  189.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  190.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  191.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  192.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  193. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  194.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  195.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  196.  filldraw stroke z5'e--z10e; fi  % base of stem
  197. % the accent
  198. lowercase_hat(x3,oo,14,15,16,17,18);
  199. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18); endchar;
  200.  
  201.  
  202. ecchar "The letter a with tilde";
  203. beginchar(oct"343",9u#,x_height#+acc_height#,0);
  204. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  205. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  206. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  207. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  208. if serifs: pos1(flare,180); pos2(hair,180);
  209.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  210.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  211.  bulb(3,2,1);  % bulb
  212. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  213.  pos3(1/8[vair,thin_join],90);
  214.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  215.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  216. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  217. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  218. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  219. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  220. pos7(hround(curve-2stem_corr),180);
  221. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  222. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  223. pos9(thin_join,360); z9l=z5l;
  224. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  225. {{interim superness:=more_super;
  226.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  227. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  228.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  229.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  230.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  231.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  232.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  233.   filldraw z5'l---z10l...z11l{right}--z11r
  234.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  235.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  236.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  237.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  238.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  239.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  240.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  241.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  242. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  243.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  244.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  245.  filldraw stroke z5'e--z10e; fi  % base of stem
  246. % the accent
  247. lowercase_tilde(0,0,14,15,16,17,18);
  248. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18); endchar;
  249.  
  250.  
  251.  
  252. ecchar "The letter a with umlaut";
  253. beginchar(oct"344",9u#,lc_trema_height#,0);
  254. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  255. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  256. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  257. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  258. if serifs: pos1(flare,180); pos2(hair,180);
  259.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  260.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  261.  bulb(3,2,1);  % bulb
  262. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  263.  pos3(1/8[vair,thin_join],90);
  264.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  265.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  266. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  267. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  268. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  269. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  270. pos7(hround(curve-2stem_corr),180);
  271. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  272. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  273. pos9(thin_join,360); z9l=z5l;
  274. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  275. {{interim superness:=more_super;
  276.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  277. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  278.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  279.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  280.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  281.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  282.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  283.   filldraw z5'l---z10l...z11l{right}--z11r
  284.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  285.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  286.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  287.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  288.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  289.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  290.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  291.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  292. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  293.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  294.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  295.  filldraw stroke z5'e--z10e; fi  % base of stem
  296. % the accent
  297. lowercase_umlaut(0,0,14,15,16,17);
  298. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17); endchar;
  299.  
  300. ecchar "The letter a with ring";
  301. beginchar(oct"345",9u#,x_height#+acc_height#,0);
  302. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  303. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  304. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  305. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  306. if serifs: pos1(flare,180); pos2(hair,180);
  307.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  308.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  309.  bulb(3,2,1);  % bulb
  310. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  311.  pos3(1/8[vair,thin_join],90);
  312.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  313.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  314. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  315. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  316. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  317. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  318. pos7(hround(curve-2stem_corr),180);
  319. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  320. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  321. pos9(thin_join,360); z9l=z5l;
  322. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  323. {{interim superness:=more_super;
  324.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  325. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  326.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  327.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  328.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  329.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  330.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  331.   filldraw z5'l---z10l...z11l{right}--z11r
  332.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  333.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  334.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  335.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  336.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  337.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  338.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  339.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  340. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  341.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  342.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  343.  filldraw stroke z5'e--z10e; fi  % base of stem
  344. % the accent
  345. lowercase_circle(x3,(1/3[x_height,h]+apex_o),14,15,16,17);
  346. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17); endchar;
  347.  
  348.  
  349.  
  350. ecchar "The ligature ae";
  351. beginchar(oct"346",13u#,x_height#,0);
  352. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  353. adjust_fit(0,0);
  354. numeric left_curve,right_curve;
  355. if monospace: right_curve=left_curve=fudged.stem;
  356. else: left_curve=max(tiny.breadth,hround(curve-2stem_corr));
  357. right_curve=max(tiny.breadth,hround(curve-if serifs:6
  358. else:8 fi\\stem_corr));fi
  359. pickup tiny.nib; pos11(right_curve,0);
  360. pos12(vair,90); pos13(mfudged.stem,180);
  361. y11=good.y bar_height; top y12r=h+vround 1.5oo; y10l=bot y11;
  362. rt x11r=hround min(w-.5u,w-u+.5right_curve);
  363. lft x13r=hround (.5w-.5mfudged.stem); x12=.55[x13,x11];
  364. {{interim superness:=more_super;
  365.  filldraw stroke super_arc.e(11,12)}};  % right bowl of e
  366. y13=.5[y12,y14]; bot y14r=-oo; x14=x12+.25u;
  367. if serifs: pos14(vair',270); pos15(mfudged.hair,360);
  368.  y15=max(good.y(.5bar_height-.9),y14l+vair); x15r=x11r;
  369.  (x,y14l)=whatever[z14r,z15]; x14l:=min(x,x14l+.5u);
  370.  filldraw stroke pulled_arc.e(12,13)
  371.   & pulled_super_arc.e(13,14)(.8superpull)
  372.   ...{x15-x14,5(y15-y14)}z15e; % left bowl, arc, and terminal of e
  373. else: pos14(vair,270);
  374.  filldraw stroke super_arc.e(12,13)
  375.   & super_arc.e(13,14);  % left bowl and arc of e
  376.  pickup fine.nib; pos14'(vair,270); z14=z14';
  377.  pos15(.5[vair,flare],275); rt x15r=hround(w-.6u);
  378. y15r=good.y(y15r+1/3bar_height-y15); y15l:=good.y
  379.  y15l; x15l:=good.x x15l;
  380.  filldraw stroke term.e(14',15,right,1,4); fi  % right terminal
  381. y11'r=y10r=y10l+.6[thin_join,vair]; y11'l=y10l;
  382.  x11'l=x11'r=x11; x10l=x10r=x13;
  383. fill stroke z10e--z11'e;  % crossbar
  384. pickup fine.nib; top y3r=h+vround 1.5oo;
  385. if serifs: pos1(flare,180); pos2(mfudged.hair,180);
  386.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=4u;
  387.  y1=min(bar_height+.5flare+2vair+2,.9[bar_height,h]-.5flare);
  388.  bulb(3,2,1);  % bulb
  389. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  390.  pos3(1/8[vair,thin_join],90);
  391.  x3=4.3u; top y1r=vround .82[bar_height,top y3r];
  392.  filldraw stroke term.e(3,1,left,.9,4); fi  % left terminal
  393. pos4(mfudged.stem,0); x4=x13; y4=1/3[bar_height,h];
  394. pos5(mfudged.stem,0); x5=x4; y5=min(y4,y13);
  395. filldraw stroke super_arc.e(3,4)&z4e--z5e;  % arc and stem
  396. pos6(.6[thin_join,vair],90); x6=x4; bot y6=y10l;
  397. pos7(left_curve,180);
  398. lft x7r=hround max(.5u,1.5u-.5left_curve);
  399. y7=1/3[top y8l,top y6r];
  400. pos8(vair,270); x8l=3.75u; bot y8r=-oo;
  401. pos9(.5[vair,fudged.stem],360); x9=x5; y9=.55bar_height;
  402. (x',y8r)=whatever[z8l,z9l]; x8r:=max(x',x8-u);
  403. {{interim superness:=more_super;
  404.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  405. if y9<y5:
  406. filldraw stroke z5e{down}..{down}z9e;
  407. fi  % link (usually hidden)
  408. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
  409. endchar;
  410.  
  411.  
  412. ecchar "The letter cedilla c";
  413. beginchar(oct"347",8u#,x_height#,0.875desc_depth#);
  414. italcorr x_height#*slant-.2u#;
  415. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  416. pickup fine.nib; pos2(vair',90); pos4(vair',270);
  417. x2=x4=.5(w+u); top y2r=vround(x_height+1.5oo); bot y4r=-oo;
  418. pos3(curve,180); lft x3r=hround max(.6u,1.35u-.5curve); y3=.5x_height;
  419. if serifs: pos1(hair,0); pos0(flare,0);
  420.  y1=min(bar_height+.5flare+2vair'+2,.9[bar_height,h]-.5flare);
  421.  rt x1r=hround(w-.7u); bulb(2,1,0);  % bulb
  422.  pos5(hair,0); rt x5r=hround(w-.5u);
  423.  y5=max(good.y(.5bar_height-.9),y4l+vair');
  424.  (x,y4l)=whatever[z4r,z5l]; x4l:=min(x,x4l+.5u);
  425.  filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
  426.   & pulled_super_arc.e(3,4)(.5superpull)
  427.   ..tension .9 and 1..{x5-x4,5(y5-y4)}z5e;  % arc and lower terminal
  428. else: pos1(4/7[vair',flare],80);
  429.  rt x1r=hround(w-.6u); top y1r=vround .82[bar_height,top y2r];
  430.  filldraw stroke term.e(2,1,right,.8,4);  % upper terminal
  431.  pos5(.6[vair',flare],275); rt x5r=hround(w-.5u);
  432.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  433.  forsuffixes e=l,r: path p.e; p.e=z4e{right}..tension .9 and 1..z5e;
  434.   if angle direction 1 of p.e>75:
  435.    p.e:=z4e{right}..tension atleast.9 and 1..{dir 75}z5e; fi endfor
  436.  filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
  437.   & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi  % arc and lower terminal
  438. % the accent
  439. lowercase_cedilla(x4,0,6,7,8,9,10);
  440. penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar;
  441.  
  442.  
  443. ecchar "The letter e with gravis";
  444. beginchar_twice(oct"350",7.25u#+max(.75u#,.5curve#),x_height#+acc_height#,0);
  445. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  446. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  447. numeric left_curve,right_curve;
  448. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  449. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  450. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  451. pickup tiny.nib; pos1(right_curve,0);
  452. pos2(vair,90); pos3(left_curve,180);
  453. y1=good.y bar_height; top y2r=x_height+vround 1.5oo; y0l=bot y1;
  454. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  455. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  456. {{interim superness:=more_super;
  457.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  458. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  459. if serifs: pos4(vair',270); pos5(hair,360);
  460.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  461.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  462.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  463.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  464. else: pos4(vair,270);
  465.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  466.  pickup fine.nib; pos4'(vair,270); z4=z4';
  467.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  468.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  469.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  470. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  471. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  472. forsuffixes $=l,r:
  473.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  474. fill stroke z0e--z1'e;  % crossbar
  475. hpos_corr=1.5u; put_gravis;
  476. repeat_once;
  477. penlabels(0,1,2,3,4,5,7,8); endchar;
  478.  
  479.  
  480. ecchar "The letter e with acute";
  481. beginchar_twice(oct"351",7.25u#+max(.75u#,.5curve#),x_height#+acc_height#,0);
  482. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  483. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  484. numeric left_curve,right_curve;
  485. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  486. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  487. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  488. pickup tiny.nib; pos1(right_curve,0);
  489. pos2(vair,90); pos3(left_curve,180);
  490. y1=good.y bar_height; top y2r=x_height+vround 1.5oo; y0l=bot y1;
  491. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  492. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  493. {{interim superness:=more_super;
  494.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  495. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  496. if serifs: pos4(vair',270); pos5(hair,360);
  497.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  498.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  499.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  500.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  501. else: pos4(vair,270);
  502.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  503.  pickup fine.nib; pos4'(vair,270); z4=z4';
  504.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  505.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  506.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  507. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  508. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  509. forsuffixes $=l,r:
  510.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  511. fill stroke z0e--z1'e;  % crossbar
  512. hpos_corr=-u; put_accent;
  513. repeat_once;
  514. penlabels(0,1,2,3,4,5); endchar;
  515.  
  516. ecchar "The letter circumflex e";
  517. beginchar(oct"352",7.25u#+max(.75u#,.5curve#),x_height#+acc_height#,0);
  518. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  519. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  520. numeric left_curve,right_curve;
  521. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  522. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  523. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  524. pickup tiny.nib; pos1(right_curve,0);
  525. pos2(vair,90); pos3(left_curve,180);
  526. y1=good.y bar_height; top y2r=x_height+vround 1.5oo; y0l=bot y1;
  527. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  528. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  529. {{interim superness:=more_super;
  530.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  531. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  532. if serifs: pos4(vair',270); pos5(hair,360);
  533.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  534.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  535.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  536.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  537. else: pos4(vair,270);
  538.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  539.  pickup fine.nib; pos4'(vair,270); z4=z4';
  540.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  541.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  542.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  543. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  544. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  545. forsuffixes $=l,r:
  546.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  547. fill stroke z0e--z1'e;  % crossbar
  548. % the accent
  549. lowercase_hat(.5w,oo,7,8,9,10,11);
  550. penlabels(0,1,2,3,4,5,7,8); endchar;
  551.  
  552.  
  553. ecchar "The letter e with umlaut";
  554. beginchar(oct"353",7.25u#+max(.75u#,.5curve#),lc_trema_height#,0);
  555. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  556. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  557. numeric left_curve,right_curve;
  558. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  559. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  560. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  561. pickup tiny.nib; pos1(right_curve,0);
  562. pos2(vair,90); pos3(left_curve,180);
  563. y1=good.y bar_height; top y2r=x_height+vround 1.5oo; y0l=bot y1;
  564. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  565. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  566. {{interim superness:=more_super;
  567.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  568. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  569. if serifs: pos4(vair',270); pos5(hair,360);
  570.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  571.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  572.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  573.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  574. else: pos4(vair,270);
  575.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  576.  pickup fine.nib; pos4'(vair,270); z4=z4';
  577.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  578.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  579.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  580. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  581. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  582. forsuffixes $=l,r:
  583.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  584. fill stroke z0e--z1'e;  % crossbar
  585. % the accent
  586. lowercase_umlaut(0,0,7,8,9,10);
  587. penlabels(0,1,2,3,4,5,7,8,9,10); endchar;
  588.  
  589. ecchar "The letter i with gravis";
  590. beginchar_twice(oct"354",5u#,x_height#+acc_height#,0);
  591. italcorr (x_height#+acc_height#)*slant-serif_fit#+.5stem#-2u#;
  592. adjust_fit(serif_fit#+stem_shift#
  593.    if monospace:+.25u#fi,serif_fit#-stem_shift#);
  594. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  595. if odd(w-stem'): change_width; fi
  596. lft x1l=hround(.5w-.5stem'); x1=x2;
  597. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  598. filldraw stroke z1e--z2e;  % stem
  599. if serifs or monospace:
  600.  sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  601. fi
  602. if serifs: dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  603. put_gravis;
  604. repeat_once;
  605. penlabels(1,2,3,4); endchar;
  606.  
  607.  
  608. ecchar "The letter i with acute";
  609. beginchar_twice(oct"355",5u#,x_height#+acc_height#,0);
  610. italcorr (x_height#+acc_height#)*slant-serif_fit#+.5stem#-2u#;
  611. adjust_fit(serif_fit#+stem_shift#
  612.    if monospace:+.25u#fi,serif_fit#-stem_shift#);
  613. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  614. if odd(w-stem'): change_width; fi
  615. lft x1l=hround(.5w-.5stem'); x1=x2;
  616. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  617. filldraw stroke z1e--z2e;  % stem
  618. if serifs or monospace:
  619.  sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  620. fi
  621. if serifs: dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  622. % the accent
  623. if not monospace: hpos_corr = -.5u; fi
  624. put_accent;
  625. repeat_once;
  626. penlabels(1,2); endchar;
  627.  
  628.  
  629. ecchar "The letter circumflex i";
  630. beginchar(oct"356",5u#,x_height#+acc_height#,0);
  631. italcorr (x_height#+acc_height#)*slant-serif_fit#+.5stem#-2u#;
  632. adjust_fit(serif_fit#+stem_shift#
  633.    if monospace:+.25u#fi,serif_fit#-stem_shift#);
  634. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  635. if odd(w-stem'): change_width; fi
  636. lft x1l=hround(.5w-.5stem'); x1=x2;
  637. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  638. filldraw stroke z1e--z2e;  % stem
  639. if serifs or monospace:
  640.  sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  641. fi
  642. if serifs: dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  643. % the accent
  644. lowercase_hat(x1,oo,3,4,5,6,7);
  645. penlabels(1,2,3,4,5,6,7); endchar;
  646.  
  647.  
  648. ecchar "The letter i with umlaut";
  649. beginchar(oct"357",5u#,lc_trema_height#,0);
  650. italcorr (x_height#+acc_height#)*slant-serif_fit#+.5stem#-2u#;
  651. adjust_fit(0.5u#+serif_fit#+stem_shift#
  652.    if monospace:+.25u#fi,0.5u#+serif_fit#-stem_shift#);
  653. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  654. if odd(w-stem'): change_width; fi
  655. lft x1l=hround(.5w-.5stem'); x1=x2;
  656. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  657. filldraw stroke z1e--z2e;  % stem
  658. if serifs or monospace:
  659.  sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  660. fi
  661. if serifs: dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  662. % the accent
  663. lowercase_umlaut(0,0,3,4,5,6);
  664. penlabels(1,2,3,4,5,6); endchar;
  665.  
  666. ecchar"The letter edh";
  667. % Corrected version by Yannis
  668. beginchar(oct"360",9u#,asc_height#,0);
  669. italcorr .x_height#*slant;
  670. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  671. oh := x_height;
  672. pickup fine.nib;
  673. pos1(vair,90); pos3(vair',-90);
  674. pos2(curve,180); pos4(curve,0);  pos4'(hair,0) ;
  675. lft x2r=hround max(.5u,1.25u-.5curve);
  676. x4r=w-x2r; x1=x3=.5w; top y1r=oh + vround 1.5oo; bot y3r=-oo;
  677. y2=y4=.5oh-vair_corr; y2l:=y4l:=.52oh;
  678. x4'l = x4l ; y4 = y4' ;
  679. filldraw stroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  680.  & pulled_arc.e(3,4) -- pulled_arc.e(4',1);  % bowl
  681. pos5(.5[vair,hair],40) ;
  682. x5l = x2 ; top y5r = h ; x7r = x4r; y7 = .95[x4,x1];
  683. pos7(curve,0);
  684. filldraw stroke z5e .. tension 1.1 and 1 .. z7e{down} .. z4e ;
  685. path p ; p = z5 .. tension 1.1 and 1 .. z7{down} ;
  686. z6 = ((0,if monospace:.6 else: .7 fi[x_height,asc_height]) -- 
  687.      (w,.6[x_height,asc_height]))
  688.      intersectionpoint p ;  
  689. pos6'(.5[vair,hair],-60) ; pos 6''(.5[vair,hair],-60) ;
  690. top y6''l = h ; z6'' = z6 + whatever*dir30;
  691. z6 = .5[z6',z6''] ; filldraw stroke z6'e -- z6''e ;
  692. penlabels(1,2,3,4,5,6,6',6''); endchar;
  693.  
  694. ecchar "The letter n with tilde";
  695. beginchar(oct"361",10u#,x_height#+acc_height#,0);
  696. italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#;
  697. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  698. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  699. numeric shaved_stem; shaved_stem=hround(stem-2stem_corr);
  700. pos1'(shaved_stem,0); pos2'(shaved_stem,0); pos3(stem,0);
  701. lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l; x3=w-x1;
  702. top y1=x_height+min(oo,serif_drop); bot y2=0; y1=y1'; y2=y2';
  703. filldraw stroke z1'e--z2'e;  % left stem
  704. h_stroke(2,a,3,4);  % arch and right stem
  705. if serifs: sloped_serif.l(1',2',b,1/3,jut,serif_drop); % upper left serif
  706.  numeric inner_jut; pickup tiny.nib;
  707.  if rt x2r+jut+.5u+1<=lft x4l-jut: inner_jut=jut;
  708.  else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi
  709.  dish_serif(2,1,c,1/3,jut,d,1/3,jut); % lower left serif
  710.  dish_serif(4,3,e,1/3,inner_jut,f,1/3,jut); fi % lower right serif
  711. % the accent
  712. lowercase_tilde(0,0,5,6,7,8,9);
  713. penlabels(1,2,3,4,5,6,7,8,9); endchar;
  714.  
  715.  
  716. ecchar "The letter o with gravis";
  717. beginchar_twice(oct"362",9u#,x_height#+acc_height#,0);
  718. italcorr .7x_height#*slant;
  719. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  720. penpos1(vair,90); penpos3(vair',-90);
  721. penpos2(curve,180); penpos4(curve,0);
  722. x2r=hround max(.5u,1.25u-.5curve);
  723. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  724. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  725. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  726.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  727. hpos_corr=u; put_gravis;
  728. repeat_once;
  729. penlabels(1,2,3,4); endchar;
  730.  
  731.  
  732. ecchar "The letter o with acute"; % from pl_ml (plfonts)
  733. beginchar_twice(oct"363",9u#,x_height#,0);
  734.  italcorr .7x_height#*slant;
  735.  adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  736.  penpos1(vair,90); penpos3(vair',-90);
  737.  penpos2(curve,180); penpos4(curve,0);
  738.  x2r=hround max(.5u,1.25u-.5curve);
  739.  x4r=w-x2r; x1=x3=.5w; y1r=h+vround 1.5oo; y3r=-oo;
  740.  y2=y4=.5h-vair_corr; y2l:=y4l:=.52h;
  741.  penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  742.   & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  743.  penlabels(1,2,3,4);
  744. if serifs: hpos_corr=-u; fi put_accent;
  745. repeat_once;
  746. endchar;
  747.  
  748.  
  749. ecchar "The letter o with circumflex";
  750. beginchar(oct"364",9u#,x_height#+acc_height#,0);
  751. italcorr .7x_height#*slant;
  752. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  753. penpos1(vair,90); penpos3(vair',-90);
  754. penpos2(curve,180); penpos4(curve,0);
  755. x2r=hround max(.5u,1.25u-.5curve);
  756. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  757. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  758. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  759.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  760. % the accent
  761. lowercase_hat(x1,oo,5,6,7,8,9);
  762. penlabels(1,2,3,4,5,6,7,8,9); endchar;
  763.  
  764. ecchar "The letter o with tilde";
  765. beginchar(oct"365",9u#,x_height#+acc_height#,0);
  766. italcorr .7x_height#*slant;
  767. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  768. penpos1(vair,90); penpos3(vair',-90);
  769. penpos2(curve,180); penpos4(curve,0);
  770. x2r=hround max(.5u,1.25u-.5curve);
  771. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  772. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  773. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  774.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  775. % the accent
  776. lowercase_tilde(0,0,5,6,7,8,9);
  777. penlabels(1,2,3,4,5,6,7,8,9);endchar;
  778.  
  779. ecchar "The letter o with umlaut";
  780. beginchar(oct"366",9u#,lc_trema_height#,0);
  781. italcorr .7x_height#*slant;
  782. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  783. penpos1(vair,90); penpos3(vair',-90);
  784. penpos2(curve,180); penpos4(curve,0);
  785. x2r=hround max(.5u,1.25u-.5curve);
  786. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  787. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  788. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  789.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  790. % the accent
  791. lowercase_umlaut(0,0,5,6,7,8);
  792. penlabels(1,2,3,4,5,6,7,8); endchar;
  793.  
  794. ecchar "The ligature oe";
  795. beginchar(oct"367",14u#,x_height#,0);
  796. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  797. adjust_fit(0,0);
  798. numeric left_curve,right_curve;
  799. if monospace: right_curve=left_curve=fudged.stem;
  800. else: left_curve=max(fine.breadth,hround(curve-2stem_corr));
  801.  right_curve=max(tiny.breadth,hround(curve-if serifs:6 else:8 fi\\stem_corr));fi
  802. pickup tiny.nib; pos11(right_curve,0);
  803. pos12(vair,90); pos13(mfudged.stem,180);
  804. y11=good.y bar_height; top y12r=h+vround 1.5oo; y10l=bot y11;
  805. rt x11r=hround min(w-.5u,w-u+.5right_curve);
  806. lft x13r=hround (.5(w+u)-.5mfudged.stem); x12=.55[x13,x11];
  807. {{interim superness:=more_super;
  808.  filldraw stroke super_arc.e(11,12)}};  % right bowl of e
  809. y13=.5[y12,y14]; bot y14r=-oo; x14=x12+.25u;
  810. if serifs: pos14(vair',270); pos15(mfudged.hair,360);
  811.  y15=max(good.y(.5bar_height-.9),y14l+vair); x15r=x11r;
  812.  (x,y14l)=whatever[z14r,z15]; x14l:=min(x,x14l+.5u);
  813.  filldraw stroke pulled_arc.e(12,13)
  814.   & pulled_super_arc.e(13,14)(.8superpull)
  815.   ...{x15-x14,5(y15-y14)}z15e; % left bowl, arc, and terminal of e
  816. else: pos14(vair,270);
  817.  filldraw stroke super_arc.e(12,13)
  818.   & super_arc.e(13,14);  % left bowl and arc of e
  819.  pickup fine.nib; pos14'(vair,270); z14=z14';
  820.  pos15(.5[vair,flare],275); rt x15r=hround(w-.6u);
  821.  y15r=good.y(y15r+1/3bar_height-y15); y15l:=good.y y15l; x15l:=good.x x15l;
  822.  filldraw stroke term.e(14',15,right,1,4); fi  % terminal
  823. y11'r=y10r=y10l+.6[thin_join,vair]; y11'l=y10l; x11'l=x11'r=x11; x10l=x10r=x13;
  824. fill stroke z10e--z11'e;  % crossbar
  825. pickup fine.nib; pos1(vair,90); pos3(vair,-90);
  826. pos2(left_curve,180); pos4(mfudged.stem,0);
  827. lft x2r=hround max(.5u,1.25u-.5curve);
  828. z4=z13; x1=x3=.5[x2,x4]; top y1r=h+vround 1.5oo; bot y3r=-oo;
  829. y2=y4; y2l:=y4l:=.52h;
  830. filldraw stroke pulled_arc.e(1,2) & pulled_arc.e(2,3); % left half of left bowl
  831. filldraw stroke pulled_arc.e(3,4) & pulled_arc.e(4,1); % right half of left bowl
  832. penlabels(1,2,3,4,10,11,12,13,14,15); endchar;
  833.  
  834. ecchar "Scandinavian letter o/slash";
  835. beginchar(oct"370",9u#,x_height#+.5desc_depth#,.5desc_depth#);
  836. italcorr h#*slant-u#-max(.5fudge*stem#,.75u#)+.5vair#;
  837. adjust_fit(0,0);
  838. penpos1(vair,90); penpos3(vair,-90);
  839. penpos2(fudged.stem,180); penpos4(fudged.stem,0);
  840. x2r=hround max(.5u,1.25u-.5fudged.stem);
  841. x4r=w-x2r; x1=x3=.5w;
  842. y1r=x_height+vround 1.5oo; y2=y4=.5x_height-vair_corr; y3r=-oo;
  843. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  844.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  845. x5=x4; x6=x2; y5=h; y6=-d;
  846. numeric theta; theta=angle(z5-z6)-90;
  847. pickup crisp.nib; pos5(vair,theta); pos6(vair,theta);
  848. filldraw stroke z5e--z6e;  % diagonal
  849. penlabels(1,2,3,4,5,6); endchar;
  850.  
  851. ecchar "The letter u with gravis";
  852. beginchar_twice(oct"371",10u#,x_height#+acc_height#,0);
  853. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  854. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  855. numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
  856. if light_vair<fine.breadth: light_vair:=fine.breadth; fi
  857. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  858. pos3(stem,0); pos4(stem',0);
  859. lft x1l=hround(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
  860. if serifs: top y1=x_height+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
  861. else: top y1=x_height; bot y4=0; fi
  862. pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
  863. penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
  864. penpos5(max(eps,light_vair-fine),-90); penpos6(thin_join-fine,0);
  865. y6=y0=2/3bar_height;
  866. filldraw stroke z1e--z2e;  % left stem
  867. filldraw stroke z3e..z0e--z0'e..z4e;  % right stem
  868. pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
  869. (x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
  870. filldraw stroke {{interim superness:=hein_super;
  871.   pulled_arc.e(2',5)}} & z5e{right}...{up}z6e;  % arc
  872. if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
  873.  sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
  874.  sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
  875. hpos_corr=0.75u; put_gravis;
  876. repeat_once;
  877. penlabels(1,2,3,4,5,6); endchar;
  878.  
  879. ecchar "The letter u with acute";
  880. beginchar_twice(oct"372",10u#,x_height#+acc_height#,0);
  881. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  882. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  883. numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
  884. if light_vair<fine.breadth: light_vair:=fine.breadth; fi
  885. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  886. pos3(stem,0); pos4(stem',0);
  887. lft x1l=hround(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
  888. if serifs: top y1=x_height+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
  889. else: top y1=x_height; bot y4=0; fi
  890. pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
  891. penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
  892. penpos5(max(eps,light_vair-fine),-90); penpos6(thin_join-fine,0);
  893. y6=y0=2/3bar_height;
  894. filldraw stroke z1e--z2e;  % left stem
  895. filldraw stroke z3e..z0e--z0'e..z4e;  % right stem
  896. pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
  897. (x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
  898. filldraw stroke {{interim superness:=hein_super;
  899.   pulled_arc.e(2',5)}} & z5e{right}...{up}z6e;  % arc
  900. if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
  901.  sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
  902.  sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
  903. % the accent
  904. hpos_corr=-u; put_accent;
  905. repeat_once;
  906. penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
  907.  
  908.  
  909. ecchar "The letter u with circumflex";
  910. beginchar(oct"373",10u#,x_height#+acc_height#,0);
  911. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  912. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  913. numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
  914. if light_vair<fine.breadth: light_vair:=fine.breadth; fi
  915. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  916. pos3(stem,0); pos4(stem',0);
  917. lft x1l=hround(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
  918. if serifs: top y1=x_height+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
  919. else: top y1=x_height; bot y4=0; fi
  920. pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
  921. penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
  922. penpos5(max(eps,light_vair-fine),-90); penpos6(thin_join-fine,0);
  923. y6=y0=2/3bar_height;
  924. filldraw stroke z1e--z2e;  % left stem
  925. filldraw stroke z3e..z0e--z0'e..z4e;  % right stem
  926. pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
  927. (x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
  928. filldraw stroke {{interim superness:=hein_super;
  929.   pulled_arc.e(2',5)}} & z5e{right}...{up}z6e;  % arc
  930. if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
  931.  sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
  932.  sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
  933. % the accent
  934. lowercase_hat(.5[x1,x3],oo,7,8,9,10,11);
  935. penlabels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  936.  
  937.  
  938. ecchar "The letter u with umlaut";
  939. beginchar(oct"374",10u#,lc_trema_height#,0);
  940. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  941. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  942. numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
  943. if light_vair<fine.breadth: light_vair:=fine.breadth; fi
  944. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  945. pos3(stem,0); pos4(stem',0);
  946. lft x1l=hround(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
  947. if serifs: top y1=x_height+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
  948. else: top y1=x_height; bot y4=0; fi
  949. pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
  950. penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
  951. penpos5(max(eps,light_vair-fine),-90); penpos6(thin_join-fine,0);
  952. y6=y0=2/3bar_height;
  953. filldraw stroke z1e--z2e;  % left stem
  954. filldraw stroke z3e..z0e--z0'e..z4e;  % right stem
  955. pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
  956. (x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
  957. filldraw stroke {{interim superness:=hein_super;
  958.   pulled_arc.e(2',5)}} & z5e{right}...{up}z6e;  % arc
  959. if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
  960.  sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
  961.  sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
  962. % the accent
  963. lowercase_umlaut(0,0,7,8,9,10);
  964. penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
  965.  
  966. ecchar "The letter y with acute";
  967. beginchar_twice(oct"375",if serifs:9.5u# else:9u# fi,
  968.   x_height#+acc_height#,desc_depth#);
  969. italcorr x_height#*slant+.25u#;
  970. adjust_fit(serif_fit# if monospace:+\\.5u#,.5u#+ else:,fi\\ serif_fit#);
  971. numeric left_stem,right_stem,bot_stem,bot_vair,outer_jut;
  972. left_stem=fudged.stem-stem_corr;
  973. right_stem=fudged.hair if hefty:-2stem_corr fi;
  974. bot_stem=fudged.hair if hefty:-8stem_corr fi;
  975. bot_vair=Vround(if serifs: vair else:.5[vair,bot_stem] fi);
  976. outer_jut=.75jut;
  977. x1l=w-x4r=l+letter_fit+outer_jut+.25u; y1=y4r=x_height; y2=y3=0; x2l=x3l;
  978. numeric alpha,alpha[]; x9=3u; y9=bot_vair-d-oo;
  979. alpha1=diag_ratio(2,bot_stem,y1-y3,x4r-x1l-apex_corr);
  980. alpha2=diag_ratio(1,bot_stem,y1-y9,x4r-x9);
  981. if alpha1<alpha2: x2l-x1l=x4r-x3r+apex_corr; alpha=alpha1;
  982. else: alpha=alpha2; z3l=whatever[z9,z4r-(alpha*bot_stem,0)]; fi
  983. penpos3(alpha*bot_stem,0); penpos4(alpha*right_stem,0);
  984. alpha3=(y1++(x2l-x1l))/y1;
  985. penpos1(alpha3*left_stem,0); penpos2(alpha3*left_stem,0);
  986. z0=whatever[z1r,z2r]=z4l+whatever*(z3r-z4r);
  987. if y0>notch_cut: y0:=notch_cut;
  988.   fill z0+.5right{up}...{z4r-z3r}diag_end(0,4l,1,1,4r,3r)
  989.     --z3r--z2l--diag_end(2l,1l,1,1,1r,2r){z2-z1}
  990.     ...{down}z0+.5left--cycle; % left and right diagonals
  991. else: fill z0--diag_end(0,4l,1,1,4r,3r)--z3r--z2l
  992.     --diag_end(2l,1l,1,1,1r,0)--cycle; fi % left and right diagonals
  993. penpos5(alpha*bot_stem,0); z5r=whatever[z3r,z4r]; y5-.5vair=-.5d;
  994. if serifs: numeric light_bulb; light_bulb=hround 7/8[hair,flare]; clearpen;
  995.  penpos6(vair,-90); penpos7(hair,-180); penpos8(light_bulb,-180);
  996.  x6=2u; y6r=-d-oo; y8-.5light_bulb=-.85d; x8r=hround .35u;
  997.  fill stroke z3e---z5e...{left}z6e; bulb(6,7,8);  % arc and bulb
  998.  numeric inner_jut; pickup tiny.nib;
  999.  prime_points_inside(1,2); prime_points_inside(4,3);
  1000.  if rt x1'r+jut+.5u+1<=lft x4'l-jut: inner_jut=jut;
  1001.  else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi
  1002.  dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut);  % left serif
  1003.  dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark);  % right serif
  1004. else: penpos6(bot_vair,-90); x6=2.5u; y6r=-d-oo;
  1005.  fill stroke z3e---z5e...{left}z6e;  % arc
  1006.  pickup fine.nib; pos6'(bot_vair,-90); z6'=z6;
  1007.  pos7(2/3[bot_vair,flare],-85);
  1008.  lft x7l=hround u; bot y7r=vround-.96d-oo; y7l:=good.y y7l;
  1009.  filldraw stroke term.e(6',7,left,1,4); fi % arc and terminal
  1010. % the accent
  1011. put_accent;
  1012. repeat_once;
  1013. penlabels(0,1,2,3,4,5,6,7,8,9); endchar;
  1014.  
  1015. iff fancy_thorn:
  1016. ecchar "The letter thorn"; % from cmman
  1017. beginchar(oct"376",10u#+serif_fit#,asc_height#,desc_depth#);
  1018. italcorr .5x_height#*slant+min(.5curve#-.85u#,-.1u#);
  1019. adjust_fit(serif_fit#,0);
  1020. pickup tiny.nib; pos1(stem',0); pos2(stem,0);
  1021. pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
  1022. lft x1l=hround(2.5u-.5stem'); top y1=h;
  1023. numeric edge; edge=rt x2r;
  1024. pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
  1025. pos4(vair',90); pos5(curve,0); pos6(vair,-90);
  1026. rt x3l=1/3[rt x2,edge]; y3=1/8[bar_height,x_height];
  1027. x4l=w-.5(w-serif_fit)+.5u; top y4r=x_height+oo;
  1028. rt x5r=hround min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
  1029. x6=x3; bot y6r=-oo;
  1030. (x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x5r,x4]);
  1031. filldraw stroke z3e{up}...{right}z4e&super_arc.e(4,5)
  1032.  &z5e{down}...{5(x6-x5),y6-y5}z6e;  % bowl
  1033. y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{right}z4l));
  1034. pickup tiny.nib; bot y2=-d;
  1035. filldraw stroke z1e--z0'e--z0e--z2e;  % stem
  1036. pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
  1037. z7'=z2; x8l=x7'l; bot y8=0;
  1038. filldraw stroke z7'e--z8e;  % point
  1039. if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop);  % upper serif
  1040.  dish_serif(2,0,b,1/3,jut,c,1/3,jut); fi  % lower serif
  1041. penlabels(0,1,2,3,4,5,6,8); endchar;
  1042.  
  1043. iff not fancy_thorn:
  1044. ecchar "The letter thorn"; % jk: Bowl as in `p' or `b'
  1045. beginchar(oct"376",10u#+serif_fit#,asc_height#,desc_depth#);
  1046. italcorr .5x_height#*slant+min(.5curve#-.85u#,-.1u#);
  1047. adjust_fit(serif_fit#,0);
  1048. pickup tiny.nib; pos1(stem',0); pos2(stem,0);
  1049. pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
  1050. lft x1l=hround(2.5u-.5stem'); top y1=h if serifs: +min(oo,serif_drop) fi;
  1051. numeric edge; edge=rt x2r;
  1052. pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
  1053. pos4(vair',90); pos5(curve,0); pos6(vair,-90); penpos7(x3l-x3r,-180);
  1054. rt x3l=max(rt x3l-(lft x3r-tiny.lft x2l), 1/3[rt x2,edge]);
  1055. y3=1/8[bar_height,x_height];
  1056. x4l=w-.5(w-serif_fit)+.5u; top y4r=x_height+oo;
  1057. rt x5r=hround min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
  1058. x6l=x4l-.2u; bot y6r=-oo;
  1059. x7=x3; y7=min(y3,y6+y4-y3+.6vair);
  1060. (x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x5r,x4]);
  1061. (x',y6r)=whatever[z7l,z6l]; x6r:=min(x',.5[x5r,x6]);
  1062. filldraw stroke z3e{up}...{right}z4e&super_arc.e(4,5)
  1063.  &super_arc.e(5,6)&z6e{left}...{up}z7e;  % bowl
  1064. y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{right}z4l));
  1065. pickup tiny.nib; bot y2=-d;
  1066. filldraw stroke z1e--z0'e--z0e--z2e;  % stem
  1067. pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
  1068. z7'=z2; x8l=x7'l; bot y8=0;
  1069. filldraw stroke z7'e--z8e;  % point
  1070. if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop);  % upper serif
  1071.  dish_serif(2,0,b,1/3,jut,c,1/3,jut); fi  % lower serif
  1072. penlabels(0,1,2,3,4,5,6,7,8); endchar;
  1073.  
  1074.  
  1075. iff classic_sharp_s:
  1076. ecchar "German letter sharp s";
  1077. beginchar(oct"377",4.5u#+max(4.5u#,.5stem#+flare#+curve#),asc_height#,0);
  1078. italcorr asc_height#*slant-u#;
  1079. adjust_fit(serif_fit#,0);
  1080. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  1081. lft x1l=lft x2l=hround(2.5u-.5stem'); bot y1=0; y2=y4=.5[x_height,y3];
  1082. penpos3(vair-fine,90); fine.top y3r=h+oo;
  1083. filldraw stroke z1e--z2e;  % stem
  1084. numeric stem_edge,curve'; stem_edge=rt x1r; curve'=hround .5[stem',curve];
  1085. pickup fine.nib; pos4(curve',0); pos5(vair,-90);
  1086. pos2'(stem',180); z2'=z2; x3=.5[x2,x4]; rt x4r=hround(w-u);
  1087. top y5l=x_height; lft x5=min(lft x4l,hround(stem_edge+u));
  1088. filldraw stroke pulled_super_arc.e(2',3)(.5superpull)
  1089.  & pulled_super_arc.e(3,4)(.5superpull)
  1090.  & pulled_super_arc.e(4,5)(.5superpull);  % upper bowl
  1091. pos5'(vair,90); z5'=z5; pos6(curve',0); pos7(vair,-90);
  1092. rt x6r=hround(w-.5u)+3eps; y6=.4x_height; bot y7r=-oo;
  1093. if serifs: pos8(hair,-180) else: pos8(vair,-110) fi;
  1094. lft x8r=min(hround(stem_edge+.5u+1),lft x8r+x6r-2eps-x8l);
  1095. x7=max(x8l+eps,.4[lft x8r,x6]);
  1096. filldraw stroke pulled_super_arc.e(5',6)(.5superpull)
  1097.  & pulled_super_arc.e(6,7)(.5superpull);  % lower bowl
  1098. if serifs: pos9(5/7[vair,flare],-180);
  1099.  y9-(x9-lft x9r)=vround .07x_height; bulb(7,8,9);  % bulb
  1100.  penpos0(stem'-tiny,0); x0=x1; tiny.top y0=x_height;
  1101.  serif(0,1,a,0,-jut);  % bar
  1102.  dish_serif(1,2,b,1/3,jut,c,0,epsilon);  % serif
  1103. else: bot y8r=vround .01h; x8l:=good.x x8l; y8l:=good.y(y8l+.5);
  1104.  filldraw stroke term.e(7,8,left,1,4); fi  % terminal
  1105. penlabels(0,1,2,3,4,5,6,7,8,9); endchar;
  1106.  
  1107. iff not classic_sharp_s:
  1108. ecchar "German letter scharfes s";
  1109. % completely remade to exhibit the long s-short s ligature  % jk
  1110. beginchar(oct"377",4.5u#+max(4.5u#,.5stem#+flare#+curve#),asc_height#,0);
  1111. italcorr asc_height#*slant-u#;
  1112. adjust_fit(serif_fit#,0);
  1113. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  1114. lft x1l=lft x2l=hround(2.5u-.5stem'); bot y1=0; y2=y4=.5[x_height,y3];
  1115. penpos3(vair-fine,90); fine.top y3r=h+oo;
  1116. filldraw stroke z1e--z2e;  % stem
  1117. numeric stem_edge,curve'; stem_edge=rt x1r; curve'=hround .5[stem',curve];
  1118. numeric s_slab; s_slab=if serifs:vair else:Vround .1[vair,stem] fi;
  1119. numeric ess'; ess'=max(fine.breadth,ess); 
  1120. pickup fine.nib; pos4(hair,0);
  1121. pos2'(stem',180); z2'=z2; x3=.5[x2,x4]; 
  1122. rt x4r=hround(w-if not hefty: 2 fi\\u);
  1123. numeric xx; xx=min(x3, hround(stem_edge+u));
  1124. numeric theta; 
  1125. theta=90-angle(40u,x_height); slope:=-x_height/40u;  % angle at middle
  1126. pos5(max(fine.breadth,s_slab-vround vair_corr),-100);
  1127. pos22(ess',theta); pos10(s_slab,-90); 
  1128. x5l=hround(.5[xx,w-u]);
  1129. %if x5l+1<x4l: x5l:=x4l-1; fi
  1130. x5l=x22=x10;
  1131. top y5l=x_height+vround 1.5oo; bot y10r=-oo;
  1132. y22-.5ess'=y10l+if serifs:.54 else: .52 fi\\(y5r-y10l-ess');
  1133. lft x6l=xx; rt x9r=hround(w-.6u);
  1134. x6r-x6l=x9r-x9l=hround .5[s_slab,ess']-fine;
  1135. ellipse_set(5l,6l,7l,22l); ellipse_set(5r,6r,7r,22r); y6=y6r;
  1136. ellipse_set(10l,9l,8l,22l); ellipse_set(10r,9r,8r,22r); y9=y9r;
  1137. interim superness:=more_super;
  1138. filldraw stroke pulled_super_arc.e(2',3)(.5superpull)
  1139.  & pulled_super_arc.e(3,4)(.5superpull)
  1140.  & pulled_super_arc.e(4,5)(.5superpull)   % upper bowl
  1141.  ..super_arc.e(5,6) & z6e{down}
  1142.  ..z7e---z8e..z9e{down} & super_arc.e(9,10);  % main s stroke
  1143. if serifs: pos21(hair,180); pos11(hair,180);
  1144.  rt x21l=hround(w-1.05u); lft x11r=xx;
  1145.  bot y21=min(bot y5r,vround 1/5[top y8r,x_height]);
  1146.  top y11=max(top y10l,vround 5/6 bot y7l);
  1147.  filldraw stroke z10e{left}....{x11-x10,5(y11-y10)}z11e;  % lower arc
  1148.  path upper_arc, lower_arc;
  1149.  upper_arc=z21{up}....{left}z5; lower_arc=z10{left}....{x11-x10,5(y11-y10)}z11;
  1150.  pos20(.3[fine.breadth,cap_hair],0); pos12(.3[fine.breadth,cap_hair],0);
  1151.  x20r=x21l; top y20=top y5l; x12l=x11r; bot y12=bot y10r;
  1152.  x21l-x21'=x11'-x11r=1.6cap_curve-fine; y21'=y21; y11'=y11;
  1153.  t:=xpart(lower_arc intersectiontimes(z12r--z11'));
  1154.  filldraw z11r--z12l--z12r--subpath(t,1) of lower_arc--cycle;  % lower barb
  1155. else: pos21(4/7[s_slab,flare],-100); pos11(flare,-100);
  1156.  x21l=good.x(x21l+w-u-rt x21); lft x11r=xx;
  1157.  top y21l=vround(.93x_height+1.5oo); bot y11r=vround .1x_height-oo;
  1158.  filldraw stroke term.e(10,11,left,1,4); fi  % lower arc and terminal
  1159. if serifs: 
  1160.  penpos0(stem'-tiny,0); x0=x1; tiny.top y0=x_height;
  1161.  serif(0,1,a,0,-jut);  % bar
  1162.  dish_serif(1,2,b,1/3,jut,c,0,epsilon);  % serif
  1163. fi
  1164. penlabels(0,1,2,3,4,5,6,7,8,9,10.11.11',12,20,21,21',22); endchar;
  1165.  
  1166. endinput;
  1167.